﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Subgurim.Controles;

namespace HorseTrack.Domain
{
    public class Trazabilidad
    {
        #region Properties
        private List<GLatLng> lstCaminoRealizadoPorCoordenadas;
        private List<Segmento> lstCaminoRealizadoPorSegmentos;
        private GPolyline objPolyline;
        #endregion
        #region Constructor
        public Trazabilidad()
        {
            lstCaminoRealizadoPorCoordenadas = new List<GLatLng>();
            lstCaminoRealizadoPorSegmentos = new List<Segmento>();
        }
        #endregion
        #region Methods
        //public void DibujarEn(GMap gMap1, IAccionPoligono interfaceAccion)
        //{

        //    objPolyline = new GPolyline(lstCaminoRealizadoPorCoordenadas);
        //    objPolyline.clickable = true;
        //    gMap1.addPolyline(objPolyline);
        //    //ControlLog.writeLog("[Trazabilidad:dibujarEn] Dibujando traza de " + lstCaminoRealizadoPorCoordenadas.Count().ToString() + " pasos. " + this.ToString());
        //    gMap1.addListener(interfaceAccion.agregarEvento(this));

        //}
        public GPolyline GetTraza()
        {
            return objPolyline;
        }
        public void AgregarCoordenadas(double dbLatitud, double dbLongitud)
        {
            GLatLng objCoordenada = new GLatLng(dbLatitud, dbLongitud);
            lstCaminoRealizadoPorCoordenadas.Add(objCoordenada);
        }
        public void AgregarCoordenadas(GLatLng objCoordenada)
        {
            lstCaminoRealizadoPorCoordenadas.Add(objCoordenada); ;
        }
        public List<GLatLng> ObtenerTrazadoEnCoordenadas()
        {
            return lstCaminoRealizadoPorCoordenadas;
        }
        public List<Segmento> ObtenerTrazadoEnSegmentos()
        {
            return lstCaminoRealizadoPorSegmentos;
        }
        public void ConvertirASegmentos()
        {


            if (lstCaminoRealizadoPorCoordenadas.Count < 2)
            {
                throw new Exception("No alcanzan los puntos para armar al menos un segmento. Cantidad de coordenadas=" + lstCaminoRealizadoPorCoordenadas.Count.ToString());
            }

            try
            {
                for (int i = 0; i < (lstCaminoRealizadoPorCoordenadas.Count - 1); i++)
                {
                    Segmento objSegmentoAAgregar = new Segmento(lstCaminoRealizadoPorCoordenadas[i], lstCaminoRealizadoPorCoordenadas[i + 1]);
                    lstCaminoRealizadoPorSegmentos.Add(objSegmentoAAgregar);
                }
            }
            catch (Exception ex)
            {
                //    ControlLog.writeLog("[Trazabilidad:convertirASegmentos] Excepcion convirtiendo a segmento: " + ex.Message);
            }


        }
        public override string ToString()
        {
            string strReturn = "";
            foreach (GLatLng objLatLng in lstCaminoRealizadoPorCoordenadas)
            {
                strReturn += "Latitud: " + objLatLng.lat.ToString() + " Longitud: " + objLatLng.lng.ToString() + " - ";
            }

            return strReturn;
        }
        public string ObtenerCantidadDePasos()
        {
            return lstCaminoRealizadoPorCoordenadas.Count().ToString();
        }
        #endregion

    }
}
